/*
 * file_storage.c
 *
 *  Created on: 10-dic-2008
 *      Author: igor
 */

#include "storage.h"

const char* filename;			// name of csv file

struct todoitem
*del_item_from_file(struct todoitem *data) {

   struct todoitem *p = leggi_items_da_db(p);

//  p = leggi_items_da_file(p);
  struct todoitem *todolist = data;

  FILE *stream = fopen(filename, "w");

  while (p != NULL)
  {
     // FIXME: due item possono avere lo stesso titolo
     if (strcmp(p->inf.title, todolist->inf.title))
//        printf("%s,%s,%s,%s,\n", p->inf.title, p->inf.infos, p->inf.icon, p->inf.text);
        fprintf(stream, "%s,%s,%s,%s,\n", p->inf.title, p->inf.infos, p->inf.icon, p->inf.text);
     p = p->pun;
  }

  // Chiude il file
  fflush(stream);
  fclose(stream);

//  p = leggi_items_da_file(p);
  p = leggi_items_da_db(p);
  stream = fopen(filename, "w");
  while (p != NULL)
  {
    fprintf(stream, "%s,%s,%s,%s,\n", p->inf.title, p->inf.infos, p->inf.icon, p->inf.text);
    p = p->pun;
  }

  // Chiude il file
  fflush(stream);
  fclose(stream);

  return NULL;
}


struct todoitem
*add_item_into_file(struct etodoitem *tdi) {

   printf ("DEBUG: salvo su file la nota;\n");

   // Apre il file
   FILE *stream = fopen(filename,"a+");

   char *title = strdup(elm_entry_entry_get(tdi->inf.title));
   /* allocate memory */
   char *icon = tdi->inf.icon;
   char *infos = tdi->inf.infos;
   char *text = strdup(elm_entry_entry_get(tdi->inf.text));

   // Salvo la lista di contatti
   while (tdi != NULL)
   { // WHILE - OPEN

     // Scrive sul file
     fprintf(stream, "%s,%s,%s,%s,\n", title, infos, icon, text);
     // legge l'elemento successivo
     tdi = tdi->pun;

   } // WHILE - CLOSE

   // Chiude il file
   fflush(stream);
   fclose(stream);

   return tdi;
}

/*
 * leggo gli item dal file FILENAME
 */
struct todoitem
*leggi_items_da_file(struct etodoitem *p) {

   // variabili
   t_todoitem daInserire;
   t_todoitem vuoto;
   struct todoitem *punt = p;

   char linea[2048];
   int index = 0;

   // Apre il file
   FILE *stream;

   /* controlla se il file viene aperto */
   while ((stream = fopen(filename, "rt")) == NULL)
   {
      printf("Non posso aprire il file %s\n", filename);

      if (mkdir(pathname, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH) == 0) // http://digilander.libero.it/uzappi/C/librerie/funzioni/mkdir.html
         fopen(filename, "w");
      else
	 /* errore durante la creazione della directory */
         if (fopen(filename, "w") == NULL)
	    exit(1);
   }

   while(fgets(linea, 2048, stream) != NULL)
   { // WHILE - OPEN

      index = strcspn(linea, ",");
      strncpy(daInserire.title, linea, index);
      substring(daInserire.title, daInserire.title, 0, index-1);
      substring(linea, linea, index+1, strlen(linea));
      index = strcspn(linea, ",");
      strncpy(daInserire.infos, linea, index);
      substring(daInserire.infos, daInserire.infos, 0, index-1);
      substring(linea, linea, index+1, strlen(linea));
      index = strcspn(linea, ",");
      strncpy(daInserire.icon, linea, index);
      substring(daInserire.icon, daInserire.icon, 0, index-1);
      substring(linea, linea, index+1, strlen(linea));
      index = strcspn(linea, ",");
      strncpy(daInserire.text, linea, index);
      substring(daInserire.text, daInserire.text, 0, index-1);
      substring(linea, linea, index+1, strlen(linea));

      // Aggiunge l'elemento alla lista
      p = punt;
      punt = (struct todoitem *)malloc(sizeof(struct todoitem));
      punt->inf = daInserire;
      punt->pun = p;

      // azzera il valore di daInserire
      daInserire = vuoto;

   } // WHILE - CLOSE

   // Chiude il file
   fflush(stream);
   fclose(stream);

   // Esce dalla funzione e restituisce la lista
   return(punt);

}

